from django.contrib import admin
from django.apps import apps
from django.contrib.auth.admin import UserAdmin
from .models import Product, ProductImage, UserInfo, Category
from mptt.admin import DraggableMPTTAdmin


# #################### 商品主图支持多张上传在admin管理后台的显示方式  ####################################
class ProductImageInline(admin.TabularInline):
    model = ProductImage
    extra = 3  # 默认显示3个上传框


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    inlines = [ProductImageInline]
    filter_horizontal = ('categories',)  # 添加水平选择器
    # fields = ["category", 'name', 'main_image', 'video_url', 'thumbnail', 'stock', 'price', 'original_price',
    #           'sales_total', 'details', 'description', 'is_active']  # 主图紧随商品名称


admin.site.register(Category, DraggableMPTTAdmin)  # 保持树形展示


# ####################################################################################################
# 注册自定义用户模型（UserInfo）
@admin.register(UserInfo)
class UserInfoAdmin(UserAdmin):
    # 直接列出所有自定义字段（例如：phone, address, birth_date）
    fieldsets = UserAdmin.fieldsets + (
        ('自定义信息', {'fields': ('phone', 'avatar', 'address', 'nickname')}),
    )


# 动态注册其他模型（排除 Product,因上边已经注册,不能重复注册,否则出错）
# 获取应用下的所有模型
jewelry_app = apps.get_app_config('jewelry')
jewelry_models = jewelry_app.get_models()
# 需要排除的模型名
excluded_models = {'Product', 'ProductImage', 'UserInfo'}
# 批量注册模型
for model in jewelry_models:
    if model.__name__ not in excluded_models and not admin.site.is_registered(model):
        admin.site.register(model)
